﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.IO;

namespace LeitorNFe
{
    public class LeitorNFe
    {
        public FORNECEDOR Ler(string url)
        {
            TNfeProc vNFe;
            XmlDocument xmlDoc = new XmlDocument();
            FORNECEDOR fornec = null;
            try
            {
                xmlDoc.Load(url);
                vNFe = Deserializer.DeserializeObject<TNfeProc>(xmlDoc.OuterXml);
                if (vNFe != null)
                {
                    fornec = new FORNECEDOR();
                    fornec.CNPJ = vNFe.NFe.infNFe.emit.Item;
                    fornec.NOME = vNFe.NFe.infNFe.emit.xNome;
                    fornec.FANTASIA = vNFe.NFe.infNFe.emit.xFant;
                    fornec.ENDERECO = vNFe.NFe.infNFe.emit.enderEmit.xLgr;
                    fornec.NUMERO = vNFe.NFe.infNFe.emit.enderEmit.nro;
                    fornec.BAIRRO = vNFe.NFe.infNFe.emit.enderEmit.xBairro;
                    fornec.COD_MUN = vNFe.NFe.infNFe.emit.enderEmit.cMun;
                    fornec.MUNICIPIO = vNFe.NFe.infNFe.emit.enderEmit.xMun;
                    fornec.UF = vNFe.NFe.infNFe.emit.enderEmit.UF.ToString();
                    fornec.CEP = vNFe.NFe.infNFe.emit.enderEmit.CEP;
                    fornec.COD_PAIS = vNFe.NFe.infNFe.emit.enderEmit.cPais.ToString().Replace("Item","");
                    fornec.PAIS = vNFe.NFe.infNFe.emit.enderEmit.xPais.ToString();
                    fornec.FONE = vNFe.NFe.infNFe.emit.enderEmit.fone;
                    fornec.IE = vNFe.NFe.infNFe.emit.IE;
                    fornec.IM = vNFe.NFe.infNFe.emit.IM;
                    fornec.IEST = vNFe.NFe.infNFe.emit.IEST;
                    fornec.CNAE = vNFe.NFe.infNFe.emit.CNAE;
                }

                return fornec;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public void LerDiretorio(string pDir, string pDirLidos)
        {
            FORNECEDOR fornec; FORNECEDOR fornecAux;

            try
            {
                if (!Directory.Exists(pDirLidos))
                    Directory.CreateDirectory(pDirLidos);

                DirectoryInfo dir = new DirectoryInfo(pDir);
                FileInfo[] files = dir.GetFiles();
                FornecedorRepository fr = new FornecedorRepository();

                foreach (FileInfo dra in files)
                {
                    if (dra.Extension.ToLower() == ".xml")
                    {
                        try
                        {
                            fornec = Ler(Path.Combine(pDir, dra.Name));
                            if (fornec != null)
                            {
                                fornecAux = fr.getFORNECEDOR(fornec.CNPJ);
                                if (fornecAux != null)
                                {
                                    fornecAux.NOME = fornec.NOME;
                                    fornecAux.FANTASIA = fornec.FANTASIA;
                                    fornecAux.ENDERECO = fornec.ENDERECO;
                                    fornecAux.NUMERO = fornec.NUMERO;
                                    fornecAux.BAIRRO = fornec.BAIRRO;
                                    fornecAux.COD_MUN = fornec.COD_MUN;
                                    fornecAux.MUNICIPIO = fornec.MUNICIPIO;
                                    fornecAux.UF = fornec.UF;
                                    fornecAux.CEP = fornec.CEP;
                                    fornecAux.COD_PAIS = fornec.COD_PAIS;
                                    fornecAux.PAIS = fornec.PAIS;
                                    fornecAux.FONE = fornec.FONE;
                                    fornecAux.IE = fornec.IE;
                                    fornecAux.IM = fornec.IM;
                                    fornecAux.IEST = fornec.IEST;
                                    fornecAux.CNAE = fornec.CNAE;
                                    fr.Update();
                                }
                                else
                                    fr.Add(fornec);
                            }
                            if (File.Exists(Path.Combine(pDirLidos, dra.Name)))
                                File.Delete(Path.Combine(pDirLidos, dra.Name));

                            File.Move(Path.Combine(pDir, dra.Name), Path.Combine(pDirLidos, dra.Name));
                        }
                        catch (Exception ex)
                        {
                            Util.GravarLog(ex.Message, "ATUALIZACADASTRONFE");
                        }
                    }
                }

            }
            catch (Exception ex)
            {
                Util.GravarLog(ex.Message, "ATUALIZACADASTRONFE");
                throw ex;
            }
        }
    }
}
